package com.bdqn.ch03.SZ.sz3.cglib;

import net.sf.cglib.proxy.MethodInterceptor;
import net.sf.cglib.proxy.MethodProxy;
import org.apache.log4j.Logger;

import java.lang.reflect.Method;

/**
 * DynamicProxy
 *
 * 使用cglib 动态代理方式实现查看 debug 的信息
 *
 * @aurhor Administrator  whs
 * @since 2024/7/8
 */
public class DynamicProxy implements MethodInterceptor {

    private Logger logger = Logger.getLogger(DynamicProxy.class);

    /**
     * 为被代理的方法定义的代理业务规则
     * @param proxy 正在执行下面的invoke 方法的代理对象
     * @param method 是被拦截的父方法
     * @param args   传递给被拦截的父方法的参数
     * @param methodProxy
     * @return
     * @throws Throwable
     */
    @Override
    public Object intercept(Object proxy, Method method, Object[] args, MethodProxy methodProxy) throws Throwable {

        weather();
        //调用父类原始的方法
        Object result = methodProxy.invokeSuper(proxy, args);
        mood();
        return "使用cglib 动态代理方式实现查看 debug 的信息 ~~  "+result;
    }


    /**
     * 天气方法
     */
    public void weather(){
        logger.debug("今天天气真好，天空很蔚蓝");
        logger.debug("就是热的有点遭不住了");
    }

    /**
     * 心情方法
     */
    public void mood(){
        logger.debug("今天心情蛮好~");
        logger.debug("又是开心的一天~");
    }

}
